/*************************************************************************
	> File Name: reverse_str1.cpp
	> Author: 
	> Mail: 
	> Created Time: 2016年09月02日 星期五 20时11分33秒
 ************************************************************************/

// 三步翻转法
// 这种把字符串先分为两个部分，各自翻转，最后整体翻转的方法，俗称“三步翻转法”
// 时间复杂度为O(n), 空间复杂度为O(1)
#include<iostream>
using namespace std;

void ReverseString(char *s, int from, int to)
{
    // 将from与to之间的字符串字符反转
    while(from < to)
    {
        char t = s[from];
        s[from++] = s[to];
        s[to--] = t;
    }
}

void LeftRotateString(char *s, int n, int m)
{
    // 若要左移动大于n位，那么与%n是等价的
    m %= n;
    ReverseString(s, 0, m-1);
    ReverseString(s, m, n-1);
    ReverseString(s, 0, n-1);
}

int main()
{
    char ss[] = "abcdef";
    cout << ss <<endl;
    LeftRotateString(ss, 6, 3);
    cout << ss <<endl;
    
}
